home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
grintool.i
< prev
next >
Wrap
Text File
|
1997-10-26
|
14KB
|
412 lines
IMPLEMENTATION MODULE grinTools;
(*==============================================================*
* Modul: Tools zum Anzeigemodul <grin> *
* Autor: Johannes Gttker-Schnetmann *
* erstellt am: 10.04.1992 *
* letzte nderung am: 10.04.1992 *
* Version: 1.0 *
* Interne Version: V#0001 *
*==============================================================*
*----------------------------------------------------------------------------
* Datum Vers. Autor nderung (Arbeitsbericht)
*----------------------------------------------------------------------------
* 10.04.92 0001 JGS Erste Version
*----------------------------------------------------------------------------
*)
(* !!! *)
(* !!! *)
(* !!! *)
(* !!! Noch vorlufig, das mu noch geschickter *)
(* !!! programmiert werden!!! *)
(* !!! *)
(* !!! *)
(* !!! *)
(* Hier sollen demnchst auch die neuen Nachrichten erstellt werden, damit u.a. *)
(* BetreffHolen aus Cat komplett entfernt werden kann/ jetzt ist BetreffHolen *)
(* hier original mit reinkopiert *)
(* Dann kann HandleComment/CopyResult und BetreffHolen aus Cat raus *)
FROM SYSTEM IMPORT ADDRESS, ADR, CADR;
IMPORT Strings;
FROM VDIUtil IMPORT FormHandle;
FROM Messages IMPORT NewKom, NewAnswer, SendState,
NewKomMessage, NewAnsMessage,
CopyOrForwardMessage;
FROM Void IMPORT v;
IMPORT CatTypes;
IMPORT CatGlobal;
IMPORT WdwManager;
IMPORT dataSys;
IMPORT grin;
IMPORT MausTauschrsc;
IMPORT MTE;
IMPORT ListHelp;
IMPORT GroupSelect;
IMPORT data;
IMPORT AssFuncs;
IMPORT MagicAES;
IMPORT MagicStrings;
IMPORT mtAlerts;
IMPORT mtUtils;
CONST sysStrTwo = 'Kommentarzeile fr Kopie';
sysStrThree = 'Kommentarzeile fr Weiterleitung';
(*TYPE ActionType = (comment, answer, copy, pass, otherGroup);*)
VAR wegen, system : ADDRESS;
PROCEDURE LengthOf(VAR str : ARRAY OF CHAR):CARDINAL;
VAR z, l, s : INTEGER;
BEGIN
l := LENGTH(str);
s := l;
FOR z := 0 TO l-1 DO
IF str[z] IN CatTypes.charSet{'', '', '', '', '', '', ''} THEN INC(s) END
END;
RETURN CARDINAL(s);
END LengthOf;
PROCEDURE CheckBetreff (VAR Betreff: ARRAY OF CHAR): BOOLEAN;
VAR i, len : INTEGER;
l : CARDINAL;
ok : BOOLEAN;
tmp : CatTypes.String255;
BEGIN
l := LengthOf(Betreff);
MagicStrings.Assign (Betreff, tmp);
Strings.DelBlanks (tmp);
IF (tmp[0] = 0C)
THEN
MTE.info (MTE.emptyWegen);
RETURN FALSE;
ELSE
(* Auf Sonderzeichen untersuchen, insbesondere CR/LF *)
i := 0;
len := LENGTH (Betreff);
ok := TRUE;
WHILE (i < len) & ok DO
ok := ORD(Betreff[i]) >= ORD(" ");
INC (i);
END;
IF ~ok
THEN
i := mtAlerts.Alert (1, MTE.wrongWegen);
IF i = 2
THEN
i := 0;
len := LENGTH (Betreff);
WHILE (i < len) DO
IF (ORD(Betreff[i]) < ORD(" "))
THEN
(* Zeichen lschen *)
MagicStrings.Delete (Betreff, i, 1);
DEC (len, 1);
ELSE
INC (i);
END;
END;
RETURN TRUE
END;
RETURN FALSE;
END;
END;
RETURN TRUE;
END CheckBetreff;
PROCEDURE BetreffHolen(grinWdw: INTEGER; VAR Betreff : ARRAY OF CHAR; REF optStr, WGruppe, preStr : ARRAY OF CHAR;
askGrin : BOOLEAN):BOOLEAN;
(* Hier vielleicht mal modernisieren, kein ADDRESS sondern VAR-Parameter.. *)
VAR x,y,w,h,exit : INTEGER;
l : CARDINAL;
ok : BOOLEAN;
BEGIN
IF askGrin THEN grin.ActualSubject(grinWdw, Betreff) END;
(*$W-*)
mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.wgruppe, ADR(WGruppe));
mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.optstr, ADR(optStr));
mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.prestr, ADR(preStr));
mtUtils.SetObjcString (wegen, MausTauschrsc.wegenstr, Betreff);
(*$W=*)
REPEAT
exit := FormHandle(wegen);
mtUtils.ObjcString (wegen, MausTauschrsc.wegenstr, Betreff);
IF (exit # MausTauschrsc.wegcanc) THEN
ok := CheckBetreff (Betreff);
END;
UNTIL (exit = MausTauschrsc.wegcanc) OR ok;
IF exit = MausTauschrsc.wegcanc THEN RETURN FALSE END;
RETURN TRUE;
END BetreffHolen;
PROCEDURE CheckWriteAccess (REF GrName : ARRAY OF CHAR): BOOLEAN;
BEGIN
IF ~GroupSelect.GetWriteAccess (GrName)
THEN
RETURN 1 = mtAlerts.Alert (1, "[1][CAT:|Sie haben fr diese Gruppe keine Schreiberlaubnis.|Trotzdem die Nachricht schreiben?][[Ja|:[Nein]");
END;
RETURN TRUE;
END CheckWriteAccess;
PROCEDURE HandleCommentResult(grinWdw: INTEGER; result : ActionType);
CONST wgStr = 'Wegen:';
VAR Betreff : CatTypes.String255;
Gr : CatTypes.String255;
mid,
receiver,
replyto,
realName,
sender,
txt : CatTypes.String255;
orgGroup,
refId,
scrap : CatTypes.String1023;
dist : data.tDistribution;
otherReceiver: BOOLEAN;
z : CARDINAL;
PROCEDURE MakeLine();
BEGIN
grin.ActualID(grinWdw, scrap);
z := MagicStrings.Length(scrap);
IF z < 66 THEN
txt := 'Kommentar zu ';
ELSE
txt := '-';
END;
MagicStrings.Append(scrap, txt);
z := MagicStrings.Length(txt);
IF z > 80 THEN
txt[75] := 0C;
MagicStrings.Append('[..]', txt);
ELSIF z < 65 THEN
MagicStrings.Append(' in der Gruppe ', txt);
grin.ActualGroup(grinWdw, scrap);
GroupSelect.GetNetName (scrap);
MagicStrings.Append(scrap, txt);
END;
END MakeLine;
BEGIN
(* Erstmal Kram holen, den wir eventuell brauchen *)
grin.ActualGroup(grinWdw, orgGroup);
grin.ActualID(grinWdw, refId);
grin.ActualMId(grinWdw, mid);
grin.ActualDist(grinWdw, dist);
grin.ActualFrom (grinWdw, receiver);
grin.ActualReplyto (grinWdw, replyto);
grin.ActualName (grinWdw, realName);
grin.ActualSender (grinWdw, sender);
IF AssFuncs.StrIequal (receiver, sender)
THEN
MagicStrings.Assign ('', sender);
END;
IF AssFuncs.StrIequal (receiver, replyto)
THEN
MagicStrings.Assign ('', replyto);
END;
otherReceiver := FALSE;
IF result = comment THEN
MagicStrings.Assign (refId, txt);
txt[40] := 0C; IF txt[39] # 0C THEN txt[39] := 03C END;
IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Kommentar auf Nachricht:',
txt, wgStr, TRUE) THEN
IF GroupSelect.GetFollowUp (orgGroup, Gr)
THEN
IF CheckWriteAccess (Gr)
THEN
MakeLine();
NewKomMessage(orgGroup, Gr, Betreff, refId, txt, mid, receiver, realName);
END;
ELSE
IF CheckWriteAccess (orgGroup)
THEN
NewKom(refId, Betreff, orgGroup, mid, receiver, realName, dist);
END;
END;
END
ELSIF result = answer THEN
(* Get receiver *)
IF (replyto[0] # '')
THEN
otherReceiver := TRUE;
IF sender[0] # ''
THEN
(* Sender & Reply-To *)
MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch ein Reply-To und einen Sender gesetzt.|Reply-To: ", scrap);
MagicStrings.Append (replyto, scrap);
MagicStrings.Append ("|Sender: ", scrap);
MagicStrings.Append (sender, scrap);
MagicStrings.Append ("|An wen soll die Nachricht gehen?][[Sender|[ReplyTo|[Absender]", scrap);
v.int := mtAlerts.Alert (1, scrap);
IF v.int = 1
THEN
MagicStrings.Assign (sender, receiver);
ELSIF v.int = 2
THEN
MagicStrings.Assign (replyto, receiver);
ELSE
otherReceiver := FALSE;
END;
ELSE
(* Reply-To gesetzt *)
MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch ein Reply-To gesetzt.|Reply-To: ", scrap);
MagicStrings.Append (replyto, scrap);
MagicStrings.Append ("|An wen soll die Nachricht gehen?][[ReplyTo|[Absender]", scrap);
v.int := mtAlerts.Alert (1, scrap);
IF v.int = 1
THEN
MagicStrings.Assign (replyto, receiver);
ELSE
otherReceiver := FALSE;
END;
END;
ELSIF sender[0] # ''
THEN
(* Sender gesetzt *)
MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch einen Sender gesetzt.|Sender: ", scrap);
MagicStrings.Append (sender, scrap);
MagicStrings.Append ("|An wen soll die Nachricht gehen?][[Sender|[Absender]", scrap);
v.int := mtAlerts.Alert (1, scrap);
IF v.int = 1
THEN
MagicStrings.Assign (sender, receiver);
otherReceiver := TRUE;
END;
END;
IF (grin.ActualGroupNr(grinWdw) = dataSys.private)
& ~otherReceiver
THEN
MagicStrings.Assign (refId, txt);
txt[40] := 0C; IF txt[39] # 0C THEN txt[39] := 03C END;
IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Antwort auf:',
txt, wgStr, TRUE) THEN
grin.grinNewState(grinWdw, 'B');
NewAnswer(refId, Betreff, receiver, mid, realName);
END
ELSE
IF receiver[0] = ''
THEN
MTE.info (MTE.noAnonym);
RETURN;
END;
IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr persnliche Antwort an:',
receiver, wgStr, TRUE) THEN
MakeLine();
NewAnsMessage(receiver, realName, orgGroup, Betreff, refId,txt, mid);
IF (grin.ActualGroupNr(grinWdw) = dataSys.private)
& otherReceiver
THEN
(* Statusmeldung 'Gelesen' erzeugen, da Antwort als Crosskommentar
* an jemand anderen geht und die MAUS das dann nicht rafft!
*)
grin.grinNewState(grinWdw, 'B');
SendState (refId, 'G');
END;
END;
END;
ELSIF result = otherGroup THEN
IF ListHelp.SelectGroup(Gr, z, TRUE, TRUE, FALSE, ListHelp.gsmWrite)
THEN
MagicStrings.Assign ('', receiver);
IF (z # dataSys.private)
THEN IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Kommentar in andere Gruppe:',
Gr, wgStr, TRUE) THEN
MakeLine();
CatGlobal.OpenName[0] := 'G';
grin.ActualFrom (grinWdw, receiver);
NewKomMessage(orgGroup, Gr, Betreff, refId, txt, mid, receiver, realName);
END;
ELSIF ListHelp.SelectName (receiver) &
BetreffHolen (grinWdw, Betreff, 'Stichwort fr persnliche Antwort an:',
receiver, wgStr, TRUE)
THEN
(* Gruppe = dataSys.private *)
MakeLine();
CatGlobal.OpenName[0] := 'G';
NewAnsMessage(receiver, realName, orgGroup, Betreff, refId,txt, mid);
END;
END;
END
END HandleCommentResult;
VAR oldComment : CatTypes.String255;
PROCEDURE GetCommentLine(VAR str : ARRAY OF CHAR; copy : BOOLEAN):BOOLEAN;
VAR scrap : CatTypes.String255;
but : INTEGER;
ok : BOOLEAN;
BEGIN
IF copy THEN
mtUtils.SetObjcStringAdr(system, MausTauschrsc.systitle, CADR(sysStrTwo));
ELSE
mtUtils.SetObjcStringAdr(system, MausTauschrsc.systitle, CADR(sysStrThree));
END;
mtUtils.ObjcString(system, MausTauschrsc.sysstr, scrap);
mtUtils.SetObjcString(system, MausTauschrsc.sysstr, oldComment);
REPEAT
but := FormHandle (system);
IF but # MausTauschrsc.sysabruc
THEN
mtUtils.ObjcString(system, MausTauschrsc.sysstr, str);
ok := LENGTH (str) <= 79;
IF ~ok
THEN
MTE.info (MTE.longCopy);
END;
ELSE
ok := TRUE;
END;
UNTIL ok;
IF but # MausTauschrsc.sysabruc THEN
MagicStrings.Assign(str, oldComment);
mtUtils.SetObjcString(system, MausTauschrsc.sysstr, scrap);
RETURN TRUE;
ELSE
mtUtils.SetObjcString(system, MausTauschrsc.sysstr, scrap);
RETURN FALSE
END;
END GetCommentLine;
PROCEDURE HandleCopyResult(grinWdw: INTEGER; result : ActionType);
VAR Kommentar : CatTypes.String255;
name : CatTypes.String255;
scrap : CatTypes.String1023;
BEGIN
MagicStrings.Assign ("", name);
IF GetCommentLine(Kommentar, result = copy) & ListHelp.SelectName(name) THEN
grin.ActualID(grinWdw, scrap);
CopyOrForwardMessage (scrap, name, "", Kommentar, result = copy);
END
END HandleCopyResult;
PROCEDURE Handle(grinWdw: INTEGER; what : ActionType);
BEGIN
IF (what = comment) OR (what = answer) OR (what = otherGroup) THEN
HandleCommentResult (grinWdw, what)
ELSIF (what = copy) OR (what = pass) THEN
HandleCopyResult (grinWdw, what)
END;
END Handle;
PROCEDURE Init(w, s : ADDRESS);
(* Objektbaum der Betreffauswahlbox *)
BEGIN
wegen := w;
system := s;
oldComment := "";
END Init;
END grinTools.